#ifndef STATUSCODE_H
#define STATUSCODE_H

#include <string>
#include <iostream>

/**
 * Cette classe permet d'avoir des valeurs de retour plus évoluées
 * pour une fonction qu'un simple bool.
 * On peut tester un StatusCode exactement comme un bool, mais il contient
 * une valeur de retour (Valeur) et un code qui peut être utilisé pour le
 * traitement d'erreur. Une string (Message) peut egalement être joint.
 */
class StatusCode
{
 public:
  StatusCode(const bool& etat = true, const int& val = 0, const int& code = 0,
	     const std::string& message = "");
  StatusCode(const StatusCode& sc);
  virtual ~StatusCode();
  operator bool() const;
  operator int() const;
  friend std::ostream& operator<<(std::ostream& os, const StatusCode& sc);
  bool etat() const;
  int valeur() const;
  int code() const;
  std::string message() const;
 protected:
  bool Etat;
  int  Valeur, Code;
  std::string Message;
};

#endif // STATUSCODE_H
